C++11 auto 和 size_type
全部标签 我想学习使用C++11线程来加速我的语言的编译(是的,我正在构建一个编译器:x)。我尝试的第一个示例用clang(3.3SVN)抛出了几个错误。它在GCC(4.6.3)下编译良好。我从llvm.org的SVN下载了clang和libc++。clang是用GCC(4.6.3)编译的,libc++是用clang编译的。两个makefile都是使用CMake生成的。对于clang,我遵循了这个指南:http://llvm.org/docs/GettingStarted.html#checkout对于libc++,我遵循了这个指南:http://libcxx.llvm.org/我要编译的代码(
在对一些使用std::vector::value_type的模板代码中的一些错误摸不着头脑之后,我追踪到了以下内容。这是符合标准的正确行为,还是MSVC2012CTP的问题?typedefstd::vector::value_typet1;typedefstd::vector::value_typet2;static_assert(!std::is_same::value,"hmmm");上述断言失败。 最佳答案 value_type的std::vector是T(§23.3.6.1)。is_same的值将简历限定符考虑在内(§20.
我有一些代码需要线程安全和异常安全。下面的代码是我的问题的一个非常简化的版本:#include#includestd::mutexmutex;intn=0;classCounter{public:Counter(){std::lock_guardguard(mutex);n++;}~Counter(){std::lock_guardguard(mutex);//HowcanIprotectheretheunderlyingcodetomutex.lock()?n--;}};voiddoSomething(){Countercounter;//HereIcoulddosomethingm
概述 C++11中引入了许多简化编程工作的语法上的新特性,我们暂且美其名曰:“语法甜点”。下面,我们将对这些“语法甜点”一一进行介绍。语法甜点1:序列for循环 序列for循环是一种简化的for循环,可用于遍历一组序列,包括:各种容器、string、数组、初始化列表以及由begin和end函数定义的序列。#include#includeusingnamespacestd;intmain(){vectorvctTemp{1,2,3};for(autoa:vctTemp){cout语法甜点2:成员变量初始化 与Java、C#中的用法一样,可以对成员变量进行
当我运行以下代码时-我收到警告“在C++11[-Wnarrowing]中,{}中从int到longunsignedint的缩小转换是错误的。我正在使用GNU4.8编译器。typedefstructTableEntry{unsignedlongvalue;constchar*label;}TableEntry;enumFunctionType{NORMAL=0,RANGE=1};TableEntryfunctionTypes[]={{NORMAL,"NORMAL"},{RANGE,"RANGE"}};我不明白为什么编译器将枚举视为整数?这是GCC4.8中的错误吗?有什么解决方法吗?任何帮
#include#includeusingnamespacestd;intmain(){vectorstudent_marks(20);for(vector::size_typei=0;i>student_marks[i];}return0;}我在某处读到,最好使用size_type代替int。它真的会对实现产生巨大影响吗?使用size_type有什么好处? 最佳答案 vector::size_type保证涵盖vector大小的所有可能值范围.一个int不是。请注意vector::size_type通常与std::size_t相同,
我有一个C++容器,我想运行一个循环的次数与该容器中的元素数相同。但是我不关心循环期间容器中的值。例如:for(constauto&dummy:input){cout唯一的问题是,dummy是一个未使用的变量,我已指示编译器禁止使用这些变量。我想到的两个不雅的解决方案是在循环体中说(void)dummy;以使编译器静音,或者使用旧式的for循环从0到距离(开始(输入),结束(输入))。我尝试省略变量名,但编译失败(不足为奇)。我正在使用GCC4.7.2。 最佳答案 不需要显式循环。usestd::begin;usestd::end;
我正在运行下面的代码来检查data_timestamp是否超过两周。如果是两周大,则打印hello否则打印world。我是一名Java开发人员,最近开始使用C++。在互联网上学到了一些东西,所以我在这个程序中使用它。#include#include#includeintmain(){//thishastobeuint64_tbcozofoldcodeuint64_tdata_timestamp=1406066507000;constautonow=std::chrono::system_clock::now();autotwoWeeks=std::chrono::hours(24*14
我知道这听起来很愚蠢,但我在Windows7上使用MinGW32,并且“to_string未在此范围内声明。”It'sanactualGCCBug,我关注了theseinstructions他们没有工作。那么,如何在不使用to_string或stoi的情况下将int转换为C++11中的字符串?(另外,我启用了-std=c++11标志)。 最佳答案 这不是最快的方法,但您可以这样做:#include#include#includetemplatestd::stringstringulate(ValueTypev){std::ostri
我读过initializer_list是用于接受未知数量的单一类型参数的函数。但我们为什么需要它?为什么我们不能改用普通容器,例如vector或list?我尝试了以下代码,它有效。#include#include#includeusingnamespacestd;voidf(constlist&slst){for(autos:slst)cout 最佳答案 虽然您的代码没有明确提及它,但您实际上在constructoroflist中使用了initializer_list:list(std::initializer_listinit,c